#!/bin/bash

# 定义颜色变量
GREEN='\033[0;32m'
RED='\033[0;31m'
YELLOW='\033[1;33m'
NC='\033[0m' # No Color

# 检查Nginx服务是否正在运行
echo -e "${YELLOW}检查 Nginx 服务是否正在运行...${NC}"
NGINX_PROCESS_COUNT=$(ps -ef | grep nginx1.26 | grep -v grep | wc -l)
if [ "$NGINX_PROCESS_COUNT" -gt 0 ]; then
    echo -e "${GREEN}Nginx 正在运行.${NC}"
else
    echo -e "${RED}Nginx 未运行.${NC}"
fi

# 检查Nginx配置文件语法是否正确
echo -e "${YELLOW}检查 Nginx 配置文件语法...${NC}"
if /usr/local/nginx1.26/sbin/nginx -t > /dev/null 2>&1; then
    echo -e "${GREEN}Nginx 配置文件语法正确.${NC}"
else
    echo -e "${RED}Nginx 配置文件存在语法错误.${NC}"
    /usr/local/nginx1.26/sbin/nginx -t  # 输出详细的错误信息
fi

# 检查Nginx错误日志
echo -e "${YELLOW}检查 Nginx 错误日志...${NC}"
ERROR_LOG_COUNT=$(grep -c "$error$" /var/log/nginx1.26/error.log)
if [ "$ERROR_LOG_COUNT" -eq 0 ]; then
    echo -e "${GREEN}没有发现错误日志.${NC}"
else
    echo -e "${RED}发现了 $ERROR_LOG_COUNT 条错误日志.${NC}"
    grep "$error$" /var/log/nginx1.26/error.log  | tail -n 5  # 输出最近5条错误日志
fi

# 检查Nginx访问日志
echo -e "${YELLOW}检查 Nginx 访问日志...${NC}"
ACCESS_LOG_COUNT=$(wc -l < /var/log/nginx1.26/access.log)
echo -e "${GREEN}访问日志共有 $ACCESS_LOG_COUNT 条记录.${NC}"

# 检查Nginx版本
echo -e "${YELLOW}检查 Nginx 版本...${NC}"
NGINX_VERSION=$(/usr/local/nginx1.26/sbin/nginx -v 2>&1 | awk -F '/' '{print $2}')
echo -e "${GREEN}Nginx 版本: $NGINX_VERSION${NC}"

# 检查Nginx进程数
echo -e "${YELLOW}检查 Nginx 进程数...${NC}"
NGINX_PROCESS_COUNT=$(ps -ef | grep nginx1.26 | grep -v grep | wc -l)
echo -e "${GREEN}Nginx 进程数: $NGINX_PROCESS_COUNT${NC}"

# 检查Nginx资源使用情况（CPU和内存）
echo -e "${YELLOW}检查 Nginx 资源使用情况...${NC}"
NGINX_RESOURCE_USAGE=$(ps -C  nginx  -o %cpu,%mem,cmd   --no-headers | grep nginx1.26)
if [ -z "$NGINX_RESOURCE_USAGE" ]; then
    echo -e "${RED}没有找到 Nginx 进程.${NC}"
else
    echo -e "${GREEN}Nginx 资源使用情况:\n$NGINX_RESOURCE_USAGE${NC}"
fi

# 检查转发请求的成功率
echo -e "${YELLOW}检查转发请求的成功率...${NC}"
SUCCESS_STATUS_COUNT=$(grep '" 200 ' /var/log/nginx1.26/access.log | wc -l)
TOTAL_REQUESTS=$(wc -l < /var/log/nginx1.26/access.log)
SUCCESS_RATE=$(( SUCCESS_STATUS_COUNT * 100 / TOTAL_REQUESTS ))
echo -e "${GREEN}成功请求比例: $SUCCESS_RATE% (${SUCCESS_STATUS_COUNT}/${TOTAL_REQUESTS})${NC}"

# 检查转发请求的平均响应时间
echo -e "${YELLOW}检查转发请求的平均响应时间...${NC}"
# 假设日志格式中包含 $request_time 字段
RESPONSE_TIMES=$(awk '{ if ($9 == "200") print $NF }' /var/log/nginx1.26/access.log | awk -F '"' '{print $2}' | awk '{sum+=$1; count+=1} END {if (count > 0) print sum/count; else print "No successful requests"}')
if [[ $RESPONSE_TIMES =~ ^[0-9]+(\.[0-9]+)?$ ]]; then
    echo -e "${GREEN}平均响应时间: ${RESPONSE_TIMES} 秒${NC}"
else
    echo -e "${RED}无法计算平均响应时间: $RESPONSE_TIMES${NC}"
fi

# 检查转发目标的状态
echo -e "${YELLOW}检查转发目标的状态...${NC}"
# 定义输入文件路径
INPUT_FILE="./backend_servers.txt"

# 检查输入文件是否存在
if [ ! -f "$INPUT_FILE" ]; then
    echo "文件 $INPUT_FILE 不存在"
    exit 1
fi

# 读取文件并逐行检查端口是否通
while IFS=' ' read -r HOST PORT; do
    if nc -zv $HOST $PORT; then
        echo -e "${GREEN}主机 $HOST 端口 $PORT 通"
    else
        echo -e "${RED}主机 $HOST 端口 $PORT 不通"
    fi
done < "$INPUT_FILE"

# 检查Nginx流量统计
echo -e "${YELLOW}检查 Nginx 流量统计...${NC}"
# 获取总请求数
TOTAL_REQUESTS=$(wc -l < /var/log/nginx1.26/access.log)

# 获取传输的总字节数
TOTAL_BYTES_TRANSFERRED=$(awk '{ sum += $10 } END { print sum }' /var/log/nginx1.26/access.log)

# 获取每秒请求数（假设日志是按时间顺序排列的）
START_TIME=$(head -n 1 /var/log/nginx1.26/access.log | awk '{print $4}' | tr -d '[]'|sed 's/\//:/g'  | awk 'BEGIN{months["Jan"]="01"; months["Feb"]="02"; months["Mar"]="03"; months["Apr"]="04"; months["May"]="05"; months["Jun"]="06"; months["Jul"]="07"; months["Aug"]="08"; months["Sep"]="09"; months["Oct"]="10"; months["Nov"]="11"; months["Dec"]="12"} {for (i in months) gsub(i, months[i]); print}' | awk -F ':' '{print $3 "-" $2 "-" $1 " " $4 ":" $5 ":" $6}')
END_TIME=$(tail -n 1 /var/log/nginx1.26/access.log | awk '{print $4}' | tr -d '[]' |sed 's/\//:/g'  | awk 'BEGIN{months["Jan"]="01"; months["Feb"]="02"; months["Mar"]="03"; months["Apr"]="04"; months["May"]="05"; months["Jun"]="06"; months["Jul"]="07"; months["Aug"]="08"; months["Sep"]="09"; months["Oct"]="10"; months["Nov"]="11"; months["Dec"]="12"} {for (i in months) gsub(i, months[i]); print}' | awk -F ':' '{print $3 "-" $2 "-" $1 " " $4 ":" $5 ":" $6}')

START_EPOCH=$(date -d "$START_TIME" +%s)
END_EPOCH=$(date -d "$END_TIME" +%s)
TIME_DIFF=$(( END_EPOCH - START_EPOCH ))
REQUESTS_PER_SECOND=$(( TOTAL_REQUESTS / TIME_DIFF ))

echo -e "${GREEN}总请求数: $TOTAL_REQUESTS${NC}"
echo -e "${GREEN}传输的总字节数: $TOTAL_BYTES_TRANSFERRED 字节${NC}"
echo -e "${GREEN}每秒请求数 (RPS): $REQUESTS_PER_SECOND${NC}"

echo -e "${YELLOW}检查网络接口流量...${NC}"
INTERFACE="eth0" # 修改为你的实际网络接口名称

# 使用 ip 命令获取网络接口信息
TRAFFIC_INFO=$(ip -s link show $INTERFACE)

# 提取总流量、上传流量和下载流量
TOTAL_RX=$(echo "$TRAFFIC_INFO" | awk '/RX:/{getline; print $1}')
TOTAL_TX=$(echo "$TRAFFIC_INFO" | awk '/RX:/{getline; print $1}')

# 输出结果
echo -e "${GREEN}总流量: $(($TOTAL_RX + $TOTAL_TX)) 字节, 上传流量: $TOTAL_TX 字节, 下载流量: $TOTAL_RX 字节"

if [ $? -ne 0 ]; then
    echo -e "${RED}接口名称不正确或命令执行失败.${NC}"
fi

# 结束提示
echo -e "${YELLOW}巡检完成.${NC}"
